import 'package:flutter/foundation.dart';
import 'package:geolocator/geolocator.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:xiang/utils/toast.dart';

class PermissionHandler {
  Future<void> requestLocationPermission() async {
    PermissionStatus status = await Permission.location.request();
    if (status.isGranted) {
      // 权限未授予
      ToastUtil.showSuccess('成功授予位置权限');
    } else {
      // 权限未授予
      ToastUtil.showError('位置权限未授予, 请去设置中心开启');
    }
  }

  //异步获取当前设备的位置信息。
  //此方法首先根据设备的平台（Android、iOS/macOS 或 Web）配置不同的定位设置，
  //然后使用这些设置获取设备的当前位置，并处理位置信息或异常。
  Future<Position> getCurrentLocation() async {
    late LocationSettings locationSettings;

    if (defaultTargetPlatform == TargetPlatform.android) {
      // 针对Android平台，设置高精度定位、100米距离过滤、强制使用位置管理器等
      locationSettings = AndroidSettings(
          accuracy: LocationAccuracy.high,
          distanceFilter: 100,
          forceLocationManager: true,
          intervalDuration: const Duration(seconds: 10),
          foregroundNotificationConfig: const ForegroundNotificationConfig(
            notificationText:
                "Example app will continue to receive your location even when you aren't using it",
            notificationTitle: "Running in Background",
            enableWakeLock: true,
          ));
    } else if (defaultTargetPlatform == TargetPlatform.iOS ||
        defaultTargetPlatform == TargetPlatform.macOS) {
      // 针对iOS和macOS平台，设置高精度定位、健身活动类型、100米距离过滤等
      locationSettings = AppleSettings(
        accuracy: LocationAccuracy.high,
        activityType: ActivityType.fitness,
        distanceFilter: 100,
        pauseLocationUpdatesAutomatically: true,
        // 只有在应用在后台启动时才设置为true
        showBackgroundLocationIndicator: false,
      );
    } else if (kIsWeb) {
      // 针对Web环境，设置高精度定位、100米距离过滤、5分钟的最大年龄等
      locationSettings = WebSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
        maximumAge: const Duration(minutes: 5),
      );
    } else {
      // 对于其他平台，默认设置高精度定位和100米距离过滤
      locationSettings = const LocationSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
      );
    }
    try {
      // 使用配置好的定位设置获取当前位置
      // Position position =
      return await Geolocator.getCurrentPosition(
          locationSettings: locationSettings);
      // 显示成功获取到的纬度和经度
      // ToastUtil.showSuccess('${position.latitude}, ${position.longitude}');
    } catch (e) {
      // 处理可能出现的异常
      print(e.toString());
      throw Exception("请求位置权限失败");
    }
  }
}

final permissionHandler = PermissionHandler();
